import com.sun.org.apache.bcel.internal.util.ClassPath;

import java.util.Scanner;

class  Person implements Cloneable{
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

public class Test {

    public static int func(){
        int a=10;
        try{
            return a;
        }catch (NullPointerException e){

        }finally{
            return 100;
        }
    }
public static int func2(){
        int a=10;
        if(a==10){
            throw new RuntimeException();
        }
        return a;
}

    public static void main1(String[] args) {
        int ret=func();
        System.out.println(ret);//100--fianlly一定会被执行
        /*finally 执行的时机是在方法返回之前(try 或者 catch 中如果有 return 会在这个 return 之前执行 finally). 但是如果
          finally 中也存在 return 语句, 那么就会执行 finally 中的 return, 从而不会执行到 try 中原有的 return.
        一般我们不建议在 finally 中写 return (被编译器当做一个警告).*/
    }
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        int a=scanner.nextInt();
        try{
            System.out.println(10/a);

            int[] array=null;
            System.out.println(array.length);
            //程序既然已经发生异常了，说明这个业务是有问题的 所以下面的代码将不会执行
            System.out.println("1234");
        }/*catch (ArithmeticException|NullPointerException e){
            System.out.println("捕获到了异常");
        }*/
        catch (ArithmeticException e){
            e.printStackTrace();//打印栈上的异常信息 at Test.main(Test.java:19)
            System.out.println("捕获到了算数异常");
        }catch(NullPointerException e){
            System.out.println("捕获到空指针异常");
        } catch (Exception e){//父类放在最后
            System.out.println("捕获到了异常");
        }finally {//不管是否抛出异常都会被执行
            scanner.close();
            System.out.println("finally被执行了");
        }
        System.out.println("其他业务代码");
    }
}
